/*
 * nseq_launcher.cpp
 *
 *  Created on: Oct 28, 2013
 *      Author: m
 */

#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include "CPrinter.h"
#include "Sequence.h"

#define NSEQ_PATH "./nseq"

using namespace ipc;

int main ( int argc, char* argv[] )
{
    std::stringstream ss;
    int nprocesos;
    char* args[2];

    srand( time( NULL ) );

    CPrinter::setHeader( "NSQ launcher" );

    args[0] = (char*) NSEQ_PATH;
    args[1] = NULL;

    if ( argc != 2 )
    {
        CPrinter::printErr( "Cantidad de arguementos invalida.\n"
                "USO:\t\tnseq_launcher [cantidad de procesos]" );
        exit(1);
    }

    ss << argv[1];
    ss >> nprocesos;

    for ( int i = 0; i < nprocesos; i++ )
    {
        usleep( random() % 100 + 1 );
        pid_t pid = fork();
        if( pid < 0 )
        {
            CPrinter::printErr( "Error al iniciar el proceso %d", i );
            exit(1);
        }
        else
        {
            if(!pid)
            {
                if( execve( NSEQ_PATH, args, NULL ) )
                {
                    CPrinter::printErr( "Error al cargar el proceso %d.\n", i );
                    exit(1);
                }
            }
        }
    }

    return 0;
}
